package com.ihr360.job.core.repository.dao;

import com.ihr360.job.core.entity.StepExecutionLog;
import com.ihr360.job.core.repository.PageData;

import java.util.List;

public interface StepExecutionLogDao {
    void log(StepExecutionLog log);

    void log(List<StepExecutionLog> logs);

    /**
     * 拉取最新的、全错误级别的首页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLastestFirstPageLogs(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 拉取最新的、错误级别不包含TRACE的首页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLastestFirstPageLogsNoTrace(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 拉取最新的、错误级别为ERROR的首页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLastestFirstPageLogsOnlyError(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 获取日志id为lastLogId之前的、全错误级别的一页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLogs(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 获取日志id为lastLogId之前的、错误级别不包含TRACE的一页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLogsNoTrace(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 获取日志id为lastLogId之前的、错误级别为ERROR的一页日志
     *
     * @param executionId
     * @param pageSize
     * @param lastLogId
     * @return
     */
    PageData<StepExecutionLog> loadLogsOnlyError(List<Long> executionId, int pageSize, long lastLogId);

    /**
     * 获取错误日志数量
     *
     * @param executionId
     * @return
     */
    Long getErrorLogCount(List<Long> executionId);

    /**
     * 获取警告日志数量
     *
     * @param executionId
     * @return
     */
    Long getWarningLogCount(List<Long> executionId);
}